E-nodeName으로 스케줄링 실습

개요

간단하게 노드 이름으로 스케줄링을 할 때 발생하는 일을 알아보고자 한다.
VagrantKubernetes v1.32 - Penelope 버전을 구축했다.

기본 세팅

apiVersion: v1
kind: Pod
metadata:
  name: nodename
spec:
  containers:
  - name: nodename
    image: nginx

기본으로는 정말 별 볼 일 없는 파드를 만들 것이다.
image.png
현재 노드는 이렇게 3개만 있다.

없는 노드 이름 지정하기

  nodeName: worker3

image.png
없는 노드를 지정하면, 처음에는 pending 상태가 된다.
image.png
그러나 얼마 안 가 아예 failed가 떠버리는 것을 볼 수 있다.
이 순간을 노려서 describe를 찍을 수 있나 했는데, 이 즉시 파드가 삭제돼버려서 추가적으로 무언갈 볼 여지도 없다.

노드에 배치될 수 없게 자원 설정

apiVersion: v1
kind: Pod
metadata:
  name: nodename
spec:
  containers:
  - name: nodename
    image: nginx
    resources:
      requests:
        cpu: 3
  nodeName: worker1

이번에는 배치될 수 없도록 자원의 크기를 높게 잡았다.
image.png
참고로 해당 노드는 cpu를 최대 2까지 쓸 수 있다.
image.png
바로 배치될 수 없는 이유가 상태에 표시된다.

  message: 'Pod was rejected: Node didn''t have enough resource: cpu, requested: 3000,
    used: 650, capacity: 2000'

phase 자체가 Failed로 표시되며, 위와 같은 메시지가 출력된다.

결론

웬만해선 안 쓰는 게 역시 낫겠지?
아주 간단하지만, 그만큼 핸디캡도 있는 법이다.
특히 노드가 배정된 이후, 실제로 상태 업데이트를 받지 못하면 api서버가 그냥 실패라고 처리하고 파드를 아예 삭제시켜버리는데, 이 경우 정말 쥐도새도 모르게 사라지니까 조심해야 한다.

관련 문서

이름 noteType created
PDB knowledge 2024-08-31
Quality of Service knowledge 2025-03-09
어피니티 knowledge 2025-04-18
Affinity knowledge 2025-03-19
Topology Spread Constraints knowledge 2025-03-19
Scheduling Gates knowledge 2025-03-19
kube-scheduler knowledge 2025-03-19
테인트, 톨러레이션 knowledge 2025-03-19
스케줄링 제어 knowledge 2025-03-20
파드 중단 knowledge 2025-03-20
쿠버 스케줄러 시뮬레이터 소개 knowledge 2025-04-08
7W - 쿠버네티스의 스케줄링, 커스텀 스케줄러 설정 published 2025-03-22
E-nodeName으로 스케줄링 실습 topic/explain 2025-03-19

참고